import java.util.Locale;
import java.util.Scanner;

public class test {


    //装箱问题（动态规划-01背包）
    //链接：https://ac.nowcoder.com/acm/problem/16693
    //来源：牛客网
    //有一个箱子容量为V（正整数，0 ≤ V ≤ 20000），同时有n个物品（0＜n ≤ 30）
    // 每个物品有一个体积（正整数）。
    //要求n个物品中，任取若干个装入箱内，使箱子的剩余空间为最小。
    //输入描述:
    //1个整数，表示箱子容量
    //1个整数，表示有n个物品
    //接下来n行，分别表示这n个物品的各自体积
    //输出描述:
    //1个整数，表示箱子剩余空间。
    //示例1
    //输入
    //24
    //6
    //8
    //3
    //12
    //7
    //9
    //7
    //输出
    //0
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int v = in.nextInt();
        int n = in.nextInt();
        int[] arr = new int[n+1];
        for (int i = 1; i <= n; i++) {
            arr[i] = in.nextInt();
        }
        int[][] dp = new int[n+1][v+1];
        for (int i = 1; i <= n; i++) {
            for (int j = 0; j <= v; j++) {
                dp[i][j] = dp[i-1][j];
                if(j>=arr[i]){
                    dp[i][j] = Math.max(dp[i][j],dp[i-1][j-arr[i]]+arr[i]);
                }
            }
        }
        System.out.println(v-dp[n][v]);
    }



    //数组变换（贪心+位运算）
    //链接：https://www.nowcoder.com/questionTerminal/c55f4f15cc3f4ff0adede7f9c69fa0c1
    //来源：牛客网
    //牛牛有一个数组，里面的数可能不相等，现在他想把数组变为：所有的数都相等。问是否可行。
    //牛牛可以进行的操作是：将数组中的任意一个数改为这个数的两倍。
    //这个操作的使用次数不限，也可以不使用，并且可以对同一个位置使用多次。
    //数据范围：数组大小满足1≤n≤50  ，数组中的数满足1≤val≤10^9
    //输入描述:
    //输入一个正整数N (N <= 50)
    //接下来一行输入N个正整数，每个数均小于等于1e9.
    //输出描述:
    //假如经过若干次操作可以使得N个数都相等，那么输出"YES", 否则输出"NO"
    //示例1
    //输入
    //2
    //1 2
    //输出
    //YES
    //示例2
    //输入
    //3
    //1 2 3
    //输出
    //NO
    public static void main2(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n];
        int b = 0;
        for (int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
            b= Math.max(b,arr[i]);
        }
        boolean flag = true;
        for (int i = 0; i < n; i++) {
            if(b%arr[i] != 0){
                flag = false;
                break;
            }
            int x = b/arr[i];
            if((x-(x & -x)) != 0){
                flag = false;
                break;
            }
        }
        if(flag) System.out.println("YES");
        else System.out.println("NO");
    }




    //添加字符
    //链接：https://www.nowcoder.com/questionTerminal/b2b816e20e8343b49abbaf493886ce26
    //来源：牛客网
    //牛牛手里有一个字符串A，羊羊的手里有一个字符串B，B的长度大于等于A，
    // 所以牛牛想把A串变得和B串一样长，这样羊羊就愿意和牛牛一起玩了。
    //而且A的长度增加到和B串一样长的时候，对应的每一位相等的越多，羊羊就越喜欢。
    // 比如"abc"和"abd"对应相等的位数为2，为前两位。
    //牛牛可以在A的开头或者结尾添加任意字符，使得长度和B一样。现在问牛牛对A串添加完字符之后，
    // 不相等的位数最少有多少位？
    //
    //输入描述:
    //第一行为字符串A，第二行为字符串B，A的场地小于等于B的长度，B的长度小于等于50.
    // 字符均为小写字母。
    //
    //
    //输出描述:
    //输出一个整数表示A串添加完字符之后，不相等的位数最少有多少位？
    //示例1
    //输入
    //abe
    //cabc
    //输出
    //1
    public static void main1(String[] args) {
        Scanner in = new Scanner(System.in);
        char[] a = in.next().toCharArray();
        char[] b = in.next().toCharArray();
        int m = a.length;
        int n = b.length;

        int ret = m;
        for (int i = 0; i <= n-m; i++) {
            int tmp = 0;
            for (int j = 0; j < m; j++) {
                if(a[j] != b[i+j]){
                    tmp++;
                }
            }
            ret = Math.min(ret,tmp);
        }
        System.out.println(ret);
    }

}
